/**
 * 注册、登录、注销
 * */
import util from '@/libs/util';
import router from '@/router';
import Setting from '@/setting';
// import { AccountLogin, AccountRegister } from '@api/account';

import { Icon, Modal } from 'view-design';

import http from '@/api/http.js'

var async = require("async");
export default {
    namespaced: true,
    actions: {
        /**
         * @description 登录
         * @param {Object} param context
         * @param {Object} param username {String} 用户账号
         * @param {Object} param password {String} 密码
         * @param {Object} param route {Object} 登录成功后定向的路由对象 任何 vue-router 支持的格式
         */
        login({ dispatch }, {
            username = '',
            password = '',
            tyNames = '',
        } = {}) {
            return new Promise((resolve, reject) => {
                // 开始请求登录接口
                http.$post('AccountLogin', { data: { username: username, password: password } }).then(async loginRes => {               
                    if (loginRes.code == 500) {
                        resolve(loginRes)
                        return
                    }
                    icu.cookies.set('Authorization', loginRes.data);
                    icu.cookies.set('tyNames', tyNames);
                    http.$post('AccountLoginInfo', { data: {} }).then(async res => {
                        if (res.code == 200) {
                            util.cookies.set('uuid', 'res.uuid');
                            icu.storage.setData([
                                {
                                    key: 'userInfo',
                                    value: res.data
                                }
                            ]);
                            icu.storage.setData([
                                {
                                    key: 'configSB',
                                    value: {
                                        gpyxh: res.data.extend.gpyxh ? res.data.extend.gpyxh : '',
                                        zjxh: res.data.extend.zjxh ? res.data.extend.zjxh : ''
                                    }
                                }
                            ]);
                            await dispatch('admin/user/set', res.data, { root: true });
                            // 用户登录后从持久化数据加载一系列的设置
                            await dispatch('load', { loadOpenedTabs: Setting.page.loadOpenedTabs });
                            // 结束
                            resolve();
                        }
                    }).catch(err => {
                        reject(err);
                    })
                })

            })
        },
        /**
         * @description 退出登录
         * */
        logout({ commit, dispatch }, { confirm = false, vm } = {}) {
            async function logout() {
                http.$post('AccountLogoutInfo', { data: {} }).then(async res => {
                    // 删除cookie
                    util.cookies.remove('Authorization');
                    util.cookies.remove('uuid');
                    icu.cookies.remove('Authorization')
                    icu.storage.clearAll()
                    // 清空 vuex 用户信息
                    await dispatch('admin/user/set', {}, { root: true });
                    // 跳转路由
                    if (icu.cookies.get('tyNames')) {
                        router.push({
                            name: 'commodityLogin'
                        });
                        icu.cookies.remove('tyNames')
                    }else{
                        router.push({
                            name: 'login'
                        });
                    }
                })
            }
            if (confirm) {
                Modal.confirm({
                    title: vm.$t('basicLayout.logout.confirmTitle'),
                    content: vm.$t('basicLayout.logout.confirmContent'),
                    onOk() {
                        logout();
                    }
                });
            } else {
                logout();
            }
        },
        /**
         * @description 注册
         * @param {Object} param context
         * @param {Object} param mail {String} 邮箱
         * @param {Object} param password {String} 密码
         * @param {Object} param mobile {String} 手机号码
         * @param {Object} param captcha {String} 验证码
         */
        register({ dispatch }, {
            mail = '',
            password = '',
            mobile = '',
            captcha = ''
        } = {}) {
            return new Promise((resolve, reject) => {
                // 开始请求登录接口
                AccountRegister({
                    mail,
                    password,
                    mobile,
                    captcha
                })
                    .then(async res => {
                        // 注册成功后，完成与登录一致的操作
                        // 注册也可视情况不返还 uuid、token 等数据，在注册完成后，由前端自动执行一次登录逻辑
                        util.cookies.set('uuid', res.uuid);
                        util.cookies.set('token', res.token);
                        // 设置 vuex 用户信息
                        await dispatch('admin/user/set', res.info, { root: true });
                        // 用户登录后从持久化数据加载一系列的设置
                        await dispatch('load');
                        // 结束
                        resolve();
                    })
                    .catch(err => {
                        // console.log('err: ', err);
                        reject(err);
                    })
            })
        },
        /**
         * @description 用户登录后从持久化数据加载一系列的设置
         * @param {Object} state vuex state
         * @param {Object} dispatch vuex dispatch
         * @param {Object} loadOpenedTabs 是否加载页签信息
         */
        load({ state, dispatch }, { loadOpenedTabs = true } = {}) {
            return new Promise(async resolve => {
                // 加载用户登录信息
                await dispatch('admin/user/load', null, { root: true });
                // 持久化数据加载上次退出时的多页列表
                await dispatch('admin/page/openedLoad', { loadOpenedTabs }, { root: true });
                // end
                resolve();
            })
        }
    }
};
